﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using radnaVerzija.Interfejsi;
using MySql.Data.MySqlClient;

namespace radnaVerzija
{
    partial class DAL
    {
        public class RezervacijaDAO : IDaoCrud<Rezervacija>
        {
            protected MySqlCommand komanda;

            public long create(Rezervacija entitet)
            {
                try
                {
                    komanda = new MySqlCommand("insert into Rezervacije values (ToDate(@vrijemePocetka, DD.MM.YYYY), ToDate(@vrijemeZavrsetka, DD.MM.YYYY), @osoba, @teren, @cijena, @potvrdjena, @recepcionar);", konekcija);
                    komanda.Parameters.AddWithValue("@vrijemePocetka", entitet.VrijemePocetka.ToShortDateString());
                    komanda.Parameters.AddWithValue("@vrijemeZavrsetka", entitet.VrijemeZavrsetka.ToShortDateString());
                    komanda.Parameters.AddWithValue("@osoba", entitet.Osoba);
                    komanda.Parameters.AddWithValue("@teren", entitet.Teren);
                    komanda.Parameters.AddWithValue("@cijena", entitet.Cijena);
                    komanda.Parameters.AddWithValue("@potvrdjena", entitet.Potvrdjena);
                    komanda.Parameters.AddWithValue("@recepcionar", entitet.Recepcionar);
                    komanda.ExecuteNonQuery();
                    return komanda.LastInsertedId;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            public Rezervacija read(Rezervacija entitet)
            {
                try
                {
                    komanda = new MySqlCommand("select * from Rezervacije where idRezervacije = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdRezervacije);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    Rezervacija rezervacija = null;
                    citac.Read();
                    rezervacija = new Rezervacija(citac.GetDateTime("vrijemePocetka"),
                                                  citac.GetDateTime("vrijemeZavrsetka"),
                                                  citac.GetString("osoba"),
                                                  citac.GetString("teren"),
                                                  citac.GetString("cijena"),
                                                  citac.GetString("potvrdjena"),
                                                  citac.GetString("recepcionar"),
                                                  entitet.IdRezervacije);
                    citac.Close();
                    return rezervacija;
                }
                catch (Exception ex)
                {
                    throw ex;
                }

            }
            public Rezervacija update(Rezervacija entitet)
            {
                try
                {
                    komanda = new MySqlCommand("update Rezervacije set vrijemePocetka = ToDate(@vrijemePocetka, DD.MM.YYYY), vrijemeZavrsetka = ToDate(@vrijemeZavrsetka, DD.MM.YYYY), osoba = @osoba, teren = @teren, cijena = @cijena, potvrdjena = @potvrdjena, recepcionar = @recepcionar where idRecepcije = @id);", konekcija);
                    komanda.Parameters.AddWithValue("@vrijemePocetka", entitet.VrijemePocetka);
                    komanda.Parameters.AddWithValue("@vrijemeZavrsetka", entitet.VrijemeZavrsetka);
                    komanda.Parameters.AddWithValue("@osoba", entitet.Osoba);
                    komanda.Parameters.AddWithValue("@teren", entitet.Teren);
                    komanda.Parameters.AddWithValue("@cijena", entitet.Cijena);
                    komanda.Parameters.AddWithValue("@potvrdjena", entitet.Potvrdjena);
                    komanda.Parameters.AddWithValue("@recepcionar", entitet.Recepcionar);
                    komanda.Parameters.AddWithValue("@id", entitet.IdRezervacije);
                    komanda.ExecuteNonQuery();
                    return read(entitet);

                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public List<Rezervacija> getALL()
            {
                komanda = new MySqlCommand("select * from Rezervacija;", konekcija);
                MySqlDataReader citac = komanda.ExecuteReader();
                List<Rezervacija> _lista = new List<Rezervacija>();
                while (citac.Read())
                {
                    Rezervacija zaUbaciti = new Rezervacija(citac.GetDateTime("vrijemePocetka"),
                                                  citac.GetDateTime("vrijemeZavrsetka"),
                                                  citac.GetString("osoba"),
                                                  citac.GetString("teren"),
                                                  citac.GetString("cijena"),
                                                  citac.GetString("potvrdjena"),
                                                  citac.GetString("recepcionar")
                                                  );
                    zaUbaciti.IdRezervacije = citac.GetInt32("idRezervacija");
                    _lista.Add(zaUbaciti);
                }
                return _lista;
            }
            public void delete(Rezervacija entitet)
            {
                try
                {
                    komanda = new MySqlCommand("delete from Rezervacije where idRezervacije = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdRezervacije);
                    komanda.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

        }
    }
}
